package stage1.operation.module4.login;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 4. 编程题
 *
 *   使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
 *
 *   服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456"， 若 是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 *
 *   其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
 *
 *   其中 User 类的特征有：用户名、密码(字符串类型)。
 *
 *   如：
 *
 *                 UserMessage tum = new UserMessage("check", new User("admin", "123456"));
 *
 *  服务端 Login
 */
public class Login {

    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(6066);
            System.out.println("等待远程连接，端口号为：" + serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("远程主机地址：" + server.getRemoteSocketAddress());
            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(server.getInputStream()));
            Object object = in.readObject();
            UserMessage userMessage = (UserMessage)object;
            User user = userMessage.getUser();

            if ("admin".equalsIgnoreCase(user.getUserName()) && "123456".equalsIgnoreCase(user.getPassword()))
            {
                userMessage.setType("success");
            }else {
                userMessage.setType("fail");
            }

            OutputStream outToServer = server.getOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(outToServer);
            out.writeObject(userMessage);
            out.flush();
            server.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
